<?php defined('BASEPATH') OR exit('No direct script access allowed');
require_once APPPATH.'eloquent_orm/core/Eloquent_interface.php';

/**
 * Eloquent原型<p>
 * 定义共有的方法<br>
 * 读取数据, 保存数据
 * @author 张皓旻
 *
 */
abstract class Eloquent_prototype extends Eloquent_interface
{   
    /**
     * 封装db对象
     */
    public function __construct()
    {
        $this->_db =& DB();
    }
    
    /**
     * 设置属性
     * @see Eloquent_interface::__set()
     */
    public function __set($key, $value)
    {
        $this->_attributes[$key] = $value;
    }
    
    /**
     * 保存单条数据<p>
     * 可以是新建立的模型, 或查询出的模型
     * @see Eloquent_interface::save()
     */
    public function save()
    {
        if (empty($this->_attributes))
        {
            return;
        }
        
        // 主键字段存在, 则进行更新
        if (isset($this->_attributes[$this->primary_key]) &&
            $this->_attributes[$this->primary_key] != 0)
        {
            // 带上时间戳
            if ($this->timestamps === TRUE)
            {
                $this->__set('update_time', time());
            }
            
            $this->_db->where($this->primary_key, $this->_attributes[$this->primary_key]);
            return $this->_db->update($this->table, $this->_attributes);
        }
        
        // 主键字段不存在则进行插入
        if ($this->timestamps === TRUE)
        {
            $this->__set('create_time', time());
            $this->__set('update_time', time());
        }
        
        return $this->_db->insert($this->table, $this->_attributes);
    }
    
    /**
     * 内部获取属性
     * @see Eloquent_interface::_get_attribute()
     */
    protected function _get_attribute($key)
    {
        return $this->_attributes[$key];
    }
}